#include<iostream>
using namespace std;


// class A
// {
// public:
// 	A()
// 	{
// 		_a = 0;
// 	}

// private:
// 	int _a;
// };

// class Time
// {
// public:
// 	/*Time(int hour)
// 	{
// 		cout << "Time()" << endl;
// 		_hour = hour;
// 		_minute = 0;
// 		_second = 0;
// 	}*/
// private:
// 	int _hour;
// 	int _minute;
// 	int _second;

// 	A _aa;
// };

// class Date
// {
// public:
// 	//Date(int year = 1, int month = 1, int day = 1)
// 	//{
// 	//	_year = year;
// 	//	_month = month;
// 	//	_day = day;
// 	//}

// 	void Print()
// 	{
// 		cout << _year << "-" << _month << "-" << _day << endl;
// 	}
// private:
// 	// 默认生成构造函数。
// 	// 内置类型没有规定要处理(可处理，可不处理，看编译器)
// 	int _year;
// 	int _month;
// 	int _day;

// 	// 自定义类型调用默认构造函数
// 	Time _t;
// };

// int main()
// {
// 	//Date d1(2024, 4, 9);
// 	//d1.Print();

// 	Date d2;
// 	d2.Print();

// 	return 0;
// }





//class Time
//{
//public:
//private:
//	int _hour = 1;
//	int _minute;
//	int _second;
//};
//
//class Date
//{
//public:
//	//Date(int year = 1, int month = 1, int day = 1)
//	//{
//	//	_year = year;
//	//	_month = month;
//	//	_day = day;
//	//}
//
//	void Print()
//	{
//		cout << _year << "-" << _month << "-" << _day << endl;
//	}
//private:
//	// 默认生成构造函数。
//	// 内置类型没有规定要处理(可处理，可不处理，看编译器)
//
//	// 给缺省值
//	int _year = 1;
//	int _month = 1;
//	int _day = 1;
//
//	// 自定义类型调用默认构造函数
//	Time _t;
//};
//
//class Stack
//{
//	//...
//};
//
//class MyQueue 
//{
//private:
//	Stack _st1;
//	Stack _st2;
//	//int _size = 0;
//};
//
//int main()
//{
//	//Date d1(2024, 4, 9);
//	//d1.Print();
//
//	Date d2;
//	d2.Print();
//
//	return 0;
//}




//class Date
//{
//public:
//	Date(int year, int month, int day)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//
//	void Print()
//	{
//		cout << _year << "-" << _month << "-" << _day << endl;
//	}
//private:
//	// 给缺省值
//	int _year = 1;
//	int _month = 1;
//	int _day = 1;
//};
//
//int main()
//{
//	Date d2(2024, 4, 9);
//	d2.Print();
//
//	return 0;
//}

//////////////////////////////////////////////////////////////////
//typedef int DataType;
//
//class Stack
//{
//public:
//	Stack(size_t capacity = 3)
//	{
//		cout << "Stack(size_t capacity = 3)" << endl;
//
//		_array = (DataType*)malloc(sizeof(DataType) * capacity);
//		if (NULL == _array)
//		{
//			perror("malloc申请空间失败!!!");
//			return;
//		}
//		_capacity = capacity;
//		_size = 0;
//	}
//
//	void Push(DataType data)
//	{
//		// CheckCapacity();
//		_array[_size] = data;
//		_size++;
//	}
//
//	// 其他方法...
//	~Stack()
//	{
//		cout << "~Stack()" << endl;
//
//		if (_array)
//		{
//			free(_array);
//			_array = NULL;
//			_capacity = 0;
//			_size = 0;
//		}
//	}
//private:
//	DataType* _array;
//	int _capacity;
//	int _size;
//};
//
//// 20:20继续
//class MyQueue 
//{
//private:
//	Stack _st1;
//	Stack _st2;
//	int _size = 0;
//};
//
//int main()
//{
//	//Stack st;
//	MyQueue q;
//
//	return 0;
//}




// class Date
// {
// public:
// 	Date(int year, int month, int day)
// 	{
// 		_year = year;
// 		_month = month;
// 		_day = day;
// 	}

// 	/*Date(Date& d)
// 	{
// 		d._year = _year;
// 		d._month = _month;
// 		d._day = _day;
// 	}*/

// 	// Date d3(d2);
// 	//Date(const Date& d)
// 	//{
// 	//	// this->_year = d._year;
// 	//	_year = d._year;
// 	//	_month = d._month;
// 	//	_day = d._day;
// 	//}

// 	Date(Date* d)
// 	{
// 		_year = d->_year;
// 		_month = d->_month;
// 		_day = d->_day;
// 	}

// 	void Print()
// 	{
// 		cout << _year << "-" << _month << "-" << _day << endl;
// 	}
// private:
// 	// 给缺省值
// 	int _year = 1;
// 	int _month = 1;
// 	int _day = 1;
// };

// typedef int DataType;
// class Stack
// {
// public:
// 	Stack(size_t capacity = 3)
// 	{
// 		cout << "Stack(size_t capacity = 3)" << endl;

// 		_array = (DataType*)malloc(sizeof(DataType) * capacity);
// 		if (NULL == _array)
// 		{
// 			perror("malloc申请空间失败!!!");
// 			return;
// 		}
// 		_capacity = capacity;
// 		_size = 0;
// 	}

// 	// Stack st2 = st1;
// 	Stack(const Stack& st)
// 	{
// 		_array = (DataType*)malloc(sizeof(DataType) * st._capacity);
// 		if (NULL == _array)
// 		{
// 			perror("malloc申请空间失败!!!");
// 			return;
// 		}

// 		memcpy(_array, st._array, sizeof(DataType) * st._size);

// 		_size = st._size;
// 		_capacity = st._capacity;
// 	}

// 	void Push(DataType data)
// 	{
// 		// CheckCapacity();
// 		_array[_size] = data;
// 		_size++;
// 	}

// 	bool  Empty()
// 	{
// 		return _size == 0;
// 	}

// 	DataType Top()
// 	{
// 		return _array[_size - 1];
// 	}
	
// 	void Pop()
// 	{
// 		--_size;
// 	}

// 	// 其他方法...
// 	~Stack()
// 	{
// 		cout << "~Stack()" << endl;

// 		if (_array)
// 		{
// 			free(_array);
// 			_array = NULL;
// 			_capacity = 0;
// 			_size = 0;
// 		}
// 	}
// private:
// 	DataType* _array;
// 	int _capacity;
// 	int _size;
// };

// int main()
// {
// 	Date d2(2024, 4, 9);
// 	d2.Print();

// 	// 拷贝构造：用同类型的对象拷贝初始化
// 	Date d3(d2);
// 	d3.Print();


// 	Stack st1;
// 	st1.Push(1);
// 	st1.Push(2);

// 	// 拷贝构造
// 	Stack st2(st1);

// 	return 0;
// }


// void func(Date& d)
// {
// 	d.Print();
// }


// int main()
// {
// 	Date d2(2024, 4, 9);
// 	// 下面这两种写法是等价的
// 	Date d3(d2);
// 	Date d4 = d2; // 这也是拷贝构造
// 	d2.Print();
// 	d3.Print();

// 	//func(d2);
// 	/*Date d3(&d2);
// 	d3.Print();*/

// 	return 0;
// }

//class MyQueue 
//{
//private:
//	Stack _st1;
//	Stack _st2;
//	int _size = 0;
//};
//
//int main()
//{
//	Date d2(2024, 4, 9);
//	Date d4 = d2; 
//	d4.Print();
//
//	Stack st1(10);
//	st1.Push(1);
//	st1.Push(1);
//	st1.Push(1);
//
//	Stack st2 = st1;
//	st2.Push(2);
//	st2.Push(2);
//
//	while (!st2.Empty())
//	{
//		cout << st2.Top() << " ";
//		st2.Pop();
//	}
//	cout << endl;
//
//	while (!st1.Empty())
//	{
//		cout << st1.Top() << " ";
//		st1.Pop();
//	}
//	cout << endl;
//
//	MyQueue q1;
//	MyQueue q2(q1);
//
//	return 0;
//}


class Date
{
public:
	Date(int year = 1, int month = 1, int day = 1)
	{
		_year = year;
		_month = month;
		_day = day;
	}

	void Print()
	{
		cout << _year << "-" << _month << "-" << _day << endl;
	}
//private:
	// 给缺省值
	int _year = 1;
	int _month = 1;
	int _day = 1;
};

// // 大于
//bool DateGreater(const Date& dt1, const Date& dt2)
bool operator>(const Date& dt1, const Date& dt2)
{
	if (dt1._year > dt2._year)
	{
		return true;
	}
	else if (dt1._year == dt2._year)
	{
		if (dt1._month > dt2._month)
		{
			return true;
		}
		else if (dt1._month == dt2._month)
		{
			return dt1._day > dt2._day;
		}
	}

	return false;
}

// // 小于
//bool DateLess(const Date& dt1, const Date& dt2)
bool operator<(const Date& dt1, const Date& dt2)
{
	if (dt1._year < dt2._year)
	{
		return true;
	}
	else if (dt1._year == dt2._year)
	{
		if (dt1._month < dt2._month)
		{
			return true;
		}
		else if (dt1._month == dt2._month)
		{
			return dt1._day < dt2._day;
		}
	}

	return false;
}

int main()
{
	Date d1(2024, 4, 12);
	Date d2(2024, 4, 10);

	/*cout << DateGreater(d1, d2) << endl;
	cout << DateLess(d1, d2) << endl;*/

	cout << operator>(d1, d2) << endl;
	cout << (d1 > d2) << endl;
	cout << (d1 < d2) << endl;

	Date d3(2020, 2, 5);

	//int n = d1 - d3;

	return 0;
}